home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / atalk.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.1 KB  |  208 lines

  1. #ifndef __LINUX_ATALK_H__
  2. #define __LINUX_ATALK_H__
  3.  
  4. #include <asm/byteorder.h>
  5.  
  6. /*
  7.  * AppleTalk networking structures
  8.  *
  9.  * The following are directly referenced from the University Of Michigan
  10.  * netatalk for compatibility reasons.
  11.  */
  12. #define ATPORT_FIRST    1
  13. #define ATPORT_RESERVED    128
  14. #define ATPORT_LAST    254        /* 254 is only legal on localtalk */ 
  15. #define ATADDR_ANYNET    (__u16)0
  16. #define ATADDR_ANYNODE    (__u8)0
  17. #define ATADDR_ANYPORT  (__u8)0
  18. #define ATADDR_BCAST    (__u8)255
  19. #define DDP_MAXSZ    587
  20. #define DDP_MAXHOPS     15        /* 4 bits of hop counter */
  21.  
  22. #define SIOCATALKDIFADDR       (SIOCPROTOPRIVATE + 0)
  23.  
  24. struct atalk_addr {
  25.     __be16    s_net;
  26.     __u8    s_node;
  27. };
  28.  
  29. struct sockaddr_at {
  30.     sa_family_t      sat_family;
  31.     __u8          sat_port;
  32.     struct atalk_addr sat_addr;
  33.     char          sat_zero[8];
  34. };
  35.  
  36. struct atalk_netrange {
  37.     __u8    nr_phase;
  38.     __be16    nr_firstnet;
  39.     __be16    nr_lastnet;
  40. };
  41.  
  42. #ifdef __KERNEL__
  43.  
  44. #include <net/sock.h>
  45.  
  46. struct atalk_route {
  47.     struct net_device  *dev;
  48.     struct atalk_addr  target;
  49.     struct atalk_addr  gateway;
  50.     int           flags;
  51.     struct atalk_route *next;
  52. };
  53.  
  54. /**
  55.  *    struct atalk_iface - AppleTalk Interface
  56.  *    @dev - Network device associated with this interface
  57.  *    @address - Our address
  58.  *    @status - What are we doing?
  59.  *    @nets - Associated direct netrange
  60.  *    @next - next element in the list of interfaces
  61.  */
  62. struct atalk_iface {
  63.     struct net_device    *dev;
  64.     struct atalk_addr    address;
  65.     int            status;
  66. #define ATIF_PROBE    1        /* Probing for an address */
  67. #define ATIF_PROBE_FAIL    2        /* Probe collided */
  68.     struct atalk_netrange    nets;
  69.     struct atalk_iface    *next;
  70. };
  71.     
  72. struct atalk_sock {
  73.     /* struct sock has to be the first member of atalk_sock */
  74.     struct sock    sk;
  75.     __be16        dest_net;
  76.     __be16        src_net;
  77.     unsigned char    dest_node;
  78.     unsigned char    src_node;
  79.     unsigned char    dest_port;
  80.     unsigned char    src_port;
  81. };
  82.  
  83. static inline struct atalk_sock *at_sk(struct sock *sk)
  84. {
  85.     return (struct atalk_sock *)sk;
  86. }
  87.  
  88. struct ddpehdr {
  89.     __be16    deh_len_hops;    /* lower 10 bits are length, next 4 - hops */
  90.     __be16    deh_sum;
  91.     __be16    deh_dnet;
  92.     __be16    deh_snet;
  93.     __u8    deh_dnode;
  94.     __u8    deh_snode;
  95.     __u8    deh_dport;
  96.     __u8    deh_sport;
  97.     /* And netatalk apps expect to stick the type in themselves */
  98. };
  99.  
  100. static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb)
  101. {
  102.     return (struct ddpehdr *)skb_transport_header(skb);
  103. }
  104.  
  105. /* AppleTalk AARP headers */
  106. struct elapaarp {
  107.     __be16    hw_type;
  108. #define AARP_HW_TYPE_ETHERNET        1
  109. #define AARP_HW_TYPE_TOKENRING        2
  110.     __be16    pa_type;
  111.     __u8    hw_len;
  112.     __u8    pa_len;
  113. #define AARP_PA_ALEN            4
  114.     __be16    function;
  115. #define AARP_REQUEST            1
  116. #define AARP_REPLY            2
  117. #define AARP_PROBE            3
  118.     __u8    hw_src[ETH_ALEN];
  119.     __u8    pa_src_zero;
  120.     __be16    pa_src_net;
  121.     __u8    pa_src_node;
  122.     __u8    hw_dst[ETH_ALEN];
  123.     __u8    pa_dst_zero;
  124.     __be16    pa_dst_net;
  125.     __u8    pa_dst_node;
  126. } __attribute__ ((packed));
  127.  
  128. static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb)
  129. {
  130.     return (struct elapaarp *)skb_transport_header(skb);
  131. }
  132.  
  133. /* Not specified - how long till we drop a resolved entry */
  134. #define AARP_EXPIRY_TIME    (5 * 60 * HZ)
  135. /* Size of hash table */
  136. #define AARP_HASH_SIZE        16
  137. /* Fast retransmission timer when resolving */
  138. #define AARP_TICK_TIME        (HZ / 5)
  139. /* Send 10 requests then give up (2 seconds) */
  140. #define AARP_RETRANSMIT_LIMIT    10
  141. /*
  142.  * Some value bigger than total retransmit time + a bit for last reply to
  143.  * appear and to stop continual requests
  144.  */
  145. #define AARP_RESOLVE_TIME    (10 * HZ)
  146.  
  147. extern struct datalink_proto *ddp_dl, *aarp_dl;
  148. extern void aarp_proto_init(void);
  149.  
  150. /* Inter module exports */
  151.  
  152. /* Give a device find its atif control structure */
  153. static inline struct atalk_iface *atalk_find_dev(struct net_device *dev)
  154. {
  155.     return dev->atalk_ptr;
  156. }
  157.  
  158. extern struct atalk_addr *atalk_find_dev_addr(struct net_device *dev);
  159. extern struct net_device *atrtr_get_dev(struct atalk_addr *sa);
  160. extern int         aarp_send_ddp(struct net_device *dev,
  161.                        struct sk_buff *skb,
  162.                        struct atalk_addr *sa, void *hwaddr);
  163. extern void         aarp_device_down(struct net_device *dev);
  164. extern void         aarp_probe_network(struct atalk_iface *atif);
  165. extern int          aarp_proxy_probe_network(struct atalk_iface *atif,
  166.                      struct atalk_addr *sa);
  167. extern void         aarp_proxy_remove(struct net_device *dev,
  168.                        struct atalk_addr *sa);
  169.  
  170. extern void        aarp_cleanup_module(void);
  171.  
  172. extern struct hlist_head atalk_sockets;
  173. extern rwlock_t atalk_sockets_lock;
  174.  
  175. extern struct atalk_route *atalk_routes;
  176. extern rwlock_t atalk_routes_lock;
  177.  
  178. extern struct atalk_iface *atalk_interfaces;
  179. extern rwlock_t atalk_interfaces_lock;
  180.  
  181. extern struct atalk_route atrtr_default;
  182.  
  183. extern const struct file_operations atalk_seq_arp_fops;
  184.  
  185. extern int sysctl_aarp_expiry_time;
  186. extern int sysctl_aarp_tick_time;
  187. extern int sysctl_aarp_retransmit_limit;
  188. extern int sysctl_aarp_resolve_time;
  189.  
  190. #ifdef CONFIG_SYSCTL
  191. extern void atalk_register_sysctl(void);
  192. extern void atalk_unregister_sysctl(void);
  193. #else
  194. #define atalk_register_sysctl()        do { } while(0)
  195. #define atalk_unregister_sysctl()    do { } while(0)
  196. #endif
  197.  
  198. #ifdef CONFIG_PROC_FS
  199. extern int atalk_proc_init(void);
  200. extern void atalk_proc_exit(void);
  201. #else
  202. #define atalk_proc_init()    ({ 0; })
  203. #define atalk_proc_exit()    do { } while(0)
  204. #endif /* CONFIG_PROC_FS */
  205.  
  206. #endif /* __KERNEL__ */
  207. #endif /* __LINUX_ATALK_H__ */
  208.